package com.xmg.p2p.business.service;

import com.xmg.p2p.base.domain.Account;
import com.xmg.p2p.business.domain.*;

import java.math.BigDecimal;

/**
 * @BelongsProject: jinrong-website
 * @BelongsPackage: com.xmg.p2p.business.service
 * @author: Andy
 * @date: 2021.4.8 13:31
 * @Description: 流水信息
 * @since JDK 1.8
 */
public interface IAccountFlowService {
    /**
     * 添加一条线下充值单流水信息
     *
     * @param account 用户信息
     * @param ro    条件封装
     */
    void rechargeFlow(Account account, RechargeOffline ro);

    /**
     * 投标流水
     * @param account   投标金额
     * @param bid   投标账号
     */
    void bidFlow(Account account, Bid bid);


    /**
     * 取消一审的流水
     * @param account    投标人
     * @param bid   投标信息
     */
    void cance1BidFlow(Account account, Bid bid);

    /**
     * 基本的流水的信息
     * @param borrowAccount 借款人的用户对象
     * @param bidRequest    借款对象
     */
    void borrowSuccessFlow(Account borrowAccount, BidRequest bidRequest);

    /**
     * 借款成功之后对应的投标者生成的流水信息
     * @param bidAccount     投标者
     * @param bid   投标信息的 ID
     */
    void bidSuccessFlow(Account bidAccount, Bid bid);

    /**
     * 还款流水
     * @param returnAccount 还款得到用户
     * @param ps 借款的信息
     */
    void returnMoneyFlow(Account returnAccount, PaymentSchedule ps);

    /**
     * 生成收款收到的本息流水
     * @param bidAccount 生成流水的账户
     * @param psd   收款流水的信息
     */
    void receiveMoneyFlow(Account bidAccount, PaymentScheduleDetail psd);

    /**
     * 投资人收款成功,支付利息管理费
     * @param bidAccount    账户
     * @param interestChargeFee 管理费
     * @param psd  借款的信息
     */
    void interestChargeFeeFlow(Account bidAccount, BigDecimal interestChargeFee, PaymentScheduleDetail psd);

    /**
     * 申请提现生成的流水
     * @param account   用户信息
     * @param m 银行信息
     */
    void whitdrawAppllyFlow(Account account, MoneyWithdraw m);

    /**
     * 生成提现成功的流水
     * @param account   用户信息
     * @param m 银行信息
     */
    void moneyWithdrawSuccessFlow(Account account, MoneyWithdraw m);

    /**
     * 生成支付提现手续费流水
     *
     * @param account  用户信息
     * @param m 银行信息
     */
    void moneyWithdrawChargeFeeFlow(Account account, MoneyWithdraw m);

    /**
     * 生成取消或拒绝提现的流水
     *
     * @param account   用户信息
     * @param m 银行信息
     */
    void cancleWithdrawFlow(Account account, MoneyWithdraw m);

}
